package com.lhd.redisdemo;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @author lhd
 * @date 2024/7/22
 * @apiNote
 */
public class JedisConnectionFactory {
    private static final JedisPool jedisPool;

    static {
    // 初始化连接池配置对象
    JedisPoolConfig config = new JedisPoolConfig();

    // 设置连接池的最大连接数，默认为8，这里设置为100
    // 当所有物理Jedis实例都被占用的时候，最多再临时创建多少个连接
    config.setMaxTotal(100);

    // 设置连接池的最大空闲连接数，默认也是8，这里设置为50
    // 当需要一个连接时，如果有空闲的连接，则直接返回，否则创建新的连接
    config.setMaxIdle(50);

    // 设置连接池的最小空闲连接数，默认为0，这里设置为10
    // 这个参数的意义在于保证连接池中始终有10个以上的空闲连接，以便于快速响应新的请求
    config.setMinIdle(10);

    // 设置从连接池获取连接的最大等待时间，默认为-1，表示无限等待
    // 这里设置为1000毫秒，即1秒，如果超过这个时间还没有可用的连接，则抛出异常
    config.setMaxWaitMillis(1000);

    // 创建Jedis连接池对象
    // 参数1：JedisPoolConfig对象，用于配置连接池的行为
    // 参数2：Redis服务器的IP地址，这里是"192.168.50.1"
    // 参数3：Redis服务器的端口号，默认为6379
    // 参数4：连接超时时间，单位毫秒，这里是1000毫秒
    // 参数5：连接密码，这里是"123456"
    // 注意：如果Redis服务器不需要密码验证，可以将此参数设为null
    jedisPool = new JedisPool(config,
                              "192.168.50.1",
                              6379,
                              1000,
                              "123456");
}

    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}
